#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,m,Q,c[N],a[N][6];
int dp[N][6][2],last;
bool w[6];
void solve(int l,int r) {
	for(int i=l-1;i<=r;i++) {
		for(int j=1;j<=m;j++)
			dp[i][j][0]=dp[i][j][1]=0;
	}
	memset(w,0,sizeof w) ;
	for(int i=l;i<=r;i++) {
		for(int j=1;j<=m;j++) {
			if(c[i]==j) {
				dp[i][j][1]=dp[i-1][j][0]+a[i][j];
				for(int k=1;k<=m;k++) {
					dp[i][j][1]=max(dp[i][j][1],dp[i-1][k][1]+a[i][j]);
				}
			} else if(w[j]) dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1])+a[i][j];
		}
		w[c[i]]=1;
	}
	last=dp[r][c[r]][1];
	cout<<dp[r][c[r]][1]<<"\n";
}
signed main(){
	freopen("paint.in","r",stdin);
	freopen("paint.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m>>Q;
	for(int i=1;i<=n;i++) cin>>c[i];
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=m;j++)
			cin>>a[i][j] ;
	}
	solve(1,n);
	int opt,x,y;
	while(Q--) {
		cin>>opt>>x>>y;
		x^=last,y^=last;
//		cout<<"_"<<x<<" "<<y<<"\n";
		if(opt==1) {
			c[x]=y;
		} else {
			solve(x,y);
		}
	}
	return 0;
}
/*
3 2 0
2 1 2
4 4
2 4
3 1

5 3 0
2 1 3 1 3
5 7 3
7 3 4
7 4 5
4 6 6
4 7 7

*/
